// pages/moment/photo/photo.js
const app = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    files: [],
    moment: {
      name: "我",
      avatar: "../../assets/images/avatar/dog3.png",
      paths: [],
      photos: []
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  chooseImage() {
    wx.chooseMedia({
      success: (res) => {
        this.setData({
          files: this.data.files.concat(res.tempFilePaths)
        });
        const files = res.tempFiles;
        files.forEach(file => {
          this.data.moment.paths = this.data.moment.paths || [];
          this.data.moment.paths.push(file.tempFilePath);
          this.setData({
            moment: this.data.moment
          });
        })
      }
    })
  },

  bindInputChange(e) {
    // 取出定义的变量名
    let name = e.currentTarget.dataset.modal;

    // 取出实时的变量值
    let value = e.detail.value;

    // 设置这个键值对的键和值
    this.data.moment.description = value;

    // 刷新数据
    this.setData({
      moment: this.data.moment
    });
  },

  // 上传文件
  uploadFiles(filePaths) {
    wx.showLoading();
    const uploadTasks = filePaths.map(filePath => {
      return new Promise((resolve, reject) => {
        wx.uploadFile({
          url: app.globalData.api + '/upload/moment/image', // 后端接口地址
          filePath: filePath,
          name: 'file', // 与后端 multer 配置的字段名一致，这里不需要使用索引，因为每个请求都是独立的
          success: (uploadRes) => {
            const data = JSON.parse(uploadRes.data);
            resolve(data); // 解析服务器返回的数据
          },
          fail: (err) => {
            reject(err); // 上传失败，返回错误
          },
        });
      });
    });

    // 使用 Promise.all 来等待所有上传任务完成
    Promise.all(uploadTasks)
      .then((results) => {
        // 所有文件上传成功，处理结果
        this.data.moment.photos = results.map(result => result.path);
        this.data.moment.date = new Date();
        this.data.moment.user = wx.getStorageSync('user');
        // 可以根据 results 更新页面状态或提示用户
        wx.request({
          url: app.globalData.api + '/moments/create',
          method: 'POST',
          data: {
            moment: this.data.moment
          },
          success: (result) => {
            wx.hideLoading();
            wx.setStorageSync('moment', this.data.moment);
            this.setData({
              files: [],
              moment: {
                name: "我",
                avatar: "../../assets/images/avatar/3.png",
                paths: [],
                photos: []
              }
            });
            wx.navigateBack();
          }
        })
      })
      .catch((error) => {
        // 如果有任何一个文件上传失败，处理错误
        console.error('文件上传失败：', error);
        // 可以显示错误提示给用户
        wx.hideLoading();
      });
  },

  submit() {
    if (this.data.moment.paths.length > 0) {
      this.uploadFiles(this.data.moment.paths);
    }
  }
})